/* eslint-disable */
import axios from 'axios'
import store from '@/store'
import router from '@/router'
const defaultreq = axios.create ({
    baseURL:'http://toutiao.itheima.net'
})
//请求拦截器
defaultreq.interceptors.request.use(function(config){
    const {logintoken} = store.state
    if(logintoken&&logintoken.token){
        config.headers.Authorization=`Bearer ${logintoken.token}`
    }else{
        
    }
    return config;
})
// 响应拦截器
defaultreq.interceptors.response.use(
    // 响应成功进入第1个函数
    // 该函数的参数是响应对象
    function(response) {
      // Any status code that lie within the range of 2xx cause this function to trigger
      // Do something with response data
      return response;
    },
    // 响应失败进入第2个函数，该函数的参数是错误对象
    async function(error) {
      // Any status codes that falls outside the range of 2xx cause this function to trigger
      // Do something with response error
      // 如果响应码是 401 ，则请求获取新的 token
      
      // 响应拦截器中的 error 就是那个响应的错误对象
      console.dir(error);
      if (error.response && error.response.status === 401) {
        // 校验是否有 refresh_token
        const logintoken = store.state.logintoken;
        if (!logintoken || !logintoken.refresh_token) {
          router.push("/login");
  
          // 代码不要往后执行了
          return;
        }
  
        // 如果有refresh_token，则请求获取新的 token
        try {
          const res = await axios({
            method: "PUT",
            url: "http://toutiao.itheima.net/v1_0/authorizations",
            headers: {
                Authorization: `Bearer ${logintoken.refresh_token}`,
            }
          });
          console.log(res)
          // 如果获取成功，则把新的 token 更新到容器中
          console.log("刷新 token  成功", res);
          store.commit("addtoken", {
            token: res.data.data.token, // 最新获取的可用 token
            refresh_token: logintoken.refresh_token // 还是原来的 refresh_token
          });
  
          // 把之前失败的用户请求继续发出去
          // config 是一个对象，其中包含本次失败请求相关的那些配置信息，例如 url、method 都有
          // return 把 request 的请求结果继续返回给发请求的具体位置
          return defaultreq(error.config);
        } catch (err) {
          // 如果获取失败，直接跳转 登录页
          console.log("请求刷新 token 失败", err);
          router.push("/login");
        }
      }
  
      return Promise.reject(error);
    }
);


//响应拦截器
export default defaultreq